package com.demo.java.OD401_450.OD403;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最大可购买的宝石数量(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146250468
 */
public class OdMain {
    public static void main(String[] args) {
        // 创建Scanner对象用于接收输入
        Scanner scanner = new Scanner(System.in);

        // 读取整数n，表示宝石的数量
        int n = scanner.nextInt();

        // 创建数组nums，用于存储每个宝石的价格
        int[] nums = new int[n];

        // 读取宝石的价格
        for (int i = 0; i < n; i++) {
            nums[i] = scanner.nextInt();
        }

        // 读取最大可购买的宝石总金额maxSum
        int maxSum = scanner.nextInt();

        // 初始化滑动窗口的总和
        int windowSum = 0;

        // 滑动窗口的左边界
        int left = 0;

        // 存储最终结果，即最大可购买的宝石数量
        int ans = 0;

        // 使用滑动窗口技术遍历宝石数组
        for (int right = 0; right < n; right++) {
            // 将当前宝石价格添加到窗口总和中
            windowSum += nums[right];

            // 如果窗口总和小于等于maxSum，则尝试更新最大购买数量
            if (windowSum <= maxSum) {
                ans = Math.max(ans, right - left + 1);
            }

            // 如果窗口总和大于maxSum，则收缩左边界，直到窗口总和小于等于maxSum
            while (windowSum > maxSum) {
                windowSum -= nums[left]; // 减去左边界的宝石价格
                left++; // 移动左边界
            }
        }

        // 输出结果：最大可购买的宝石数量
        System.out.println(ans);
    }
}
